package com.mk.domain;

import com.github.d925529.apidoc.annotation.ApiField;
import org.beetl.sql.core.annotatoin.AssignID;
import org.beetl.sql.core.annotatoin.Param;
import org.beetl.sql.core.annotatoin.Table;
import org.beetl.sql.core.mapper.BaseMapper;

import javax.persistence.Transient;
import java.io.Serializable;
import java.util.List;
import java.util.Map;

@Table(name = "cp_user")
@SuppressWarnings("unused")
public class CpUser implements Serializable {
    @AssignID
    //用户id
    @ApiField("用户id")
    private String userid;

    //用户类型0-平台1-用户
    @ApiField("用户类型0-平台1-用户")
    private String usertype;

    //用户昵称
    @ApiField("用户昵称")
    private String nickname;

    //真实姓名
    @ApiField("真实姓名")
    private String realname;

    //密码
    @ApiField("密码")
    private String password;

    //性别(0.保密，1.男，2.女)
    @ApiField("性别(0.保密，1.男，2.女)")
    private String sex;

    //年龄
    @ApiField("年龄")
    private Integer age;

    //头像
    @ApiField("头像")
    private String headurl;

    //电话
    @ApiField("电话")
    private String phone;

    //店铺id
    @ApiField("店铺id")
    private String spid;

    //微信openid
    @ApiField("微信openid")
    private String openid;

    //微信unionid
    @ApiField("微信unionid")
    private String unionid;

    //支付宝帐号
    @ApiField("支付宝帐号")
    private String alipay;

    //支付宝姓名
    @ApiField("支付宝姓名")
    private String alipayname;

    //用户状态
    @ApiField("用户状态")
    private String userstate;

    //注册时间
    @ApiField("注册时间")
    private String regtime;

    //上次登录时间
    @ApiField("上次登录时间")
    private String lastlogintime;

    //上次登录ip
    @ApiField("上次登录ip")
    private String lastloginip;

    @ApiField("移动端token")
    @Transient
    private String devid;

    //签名
    @ApiField("签名")
    private String signtext;

    //省编码
    @ApiField("省编码")
    private String procode;

    //省名称
    @ApiField("省名称")
    private String proname;

    //市编码
    @ApiField("市编码")
    private String citycode;

    //市名称
    @ApiField("市名称")
    private String cityname;

    //区编码
    @ApiField("区编码")
    private String areacode;

    //区名称
    @ApiField("区名称")
    private String areaname;

    @ApiField("觅客用户id")
    private Integer mkuserid;

    @ApiField("来源标记(0：美多拼用户，1：直供用户，2：同一手机，3：同一微信)")
    private String usersource;

    @Transient
    @ApiField(elementType = String.class, value = "权限ids")
    private List<String> roleids;

    public String getDevid() {
        return devid;
    }

    public void setDevid(String devid) {
        this.devid = devid;
    }

    /**
     * @return 用户id
     */
    public String getUserid() {
        return userid;
    }

    /**
     * @param userid 用户id
     */
    public void setUserid(String userid) {
        this.userid = userid;
    }

    /**
     * @return 用户类型0-平台1-用户
     */
    public String getUsertype() {
        return usertype;
    }

    /**
     * @param usertype 用户类型0-平台1-用户
     */
    public void setUsertype(String usertype) {
        this.usertype = usertype;
    }

    /**
     * @return 用户昵称
     */
    public String getNickname() {
        return nickname;
    }

    /**
     * @param nickname 用户昵称
     */
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    /**
     * @return 真实姓名
     */
    public String getRealname() {
        return realname;
    }

    /**
     * @param realname 真实姓名
     */
    public void setRealname(String realname) {
        this.realname = realname;
    }

    /**
     * @return 密码
     */
    public String getPassword() {
        return password;
    }

    /**
     * @param password 密码
     */
    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * @return 性别(0.保密 ， 1.男 ， 2.女)
     */
    public String getSex() {
        return sex;
    }

    /**
     * @param sex 性别(0.保密，1.男，2.女)
     */
    public void setSex(String sex) {
        this.sex = sex;
    }

    /**
     * @return 年龄
     */
    public Integer getAge() {
        return age;
    }

    /**
     * @param age 年龄
     */
    public void setAge(Integer age) {
        this.age = age;
    }

    /**
     * @return 头像
     */
    public String getHeadurl() {
        return headurl;
    }

    /**
     * @param headurl 头像
     */
    public void setHeadurl(String headurl) {
        this.headurl = headurl;
    }

    /**
     * @return 电话
     */
    public String getPhone() {
        return phone;
    }

    /**
     * @param phone 电话
     */
    public void setPhone(String phone) {
        this.phone = phone;
    }

    /**
     * @return 店铺id
     */
    public String getSpid() {
        return spid;
    }

    /**
     * @param spid 店铺id
     */
    public void setSpid(String spid) {
        this.spid = spid;
    }

    /**
     * @return 微信openid
     */
    public String getOpenid() {
        return openid;
    }

    /**
     * @param openid 微信openid
     */
    public void setOpenid(String openid) {
        this.openid = openid;
    }

    /**
     * @return 微信unionid
     */
    public String getUnionid() {
        return unionid;
    }

    /**
     * @param unionid 微信unionid
     */
    public void setUnionid(String unionid) {
        this.unionid = unionid;
    }

    /**
     * @return 支付宝帐号
     */
    public String getAlipay() {
        return alipay;
    }

    /**
     * @param alipay 支付宝帐号
     */
    public void setAlipay(String alipay) {
        this.alipay = alipay;
    }

    /**
     * @return 支付宝姓名
     */
    public String getAlipayname() {
        return alipayname;
    }

    /**
     * @param alipayname 支付宝姓名
     */
    public void setAlipayname(String alipayname) {
        this.alipayname = alipayname;
    }

    /**
     * @return 用户状态
     */
    public String getUserstate() {
        return userstate;
    }

    /**
     * @param userstate 用户状态
     */
    public void setUserstate(String userstate) {
        this.userstate = userstate;
    }

    /**
     * @return 注册时间
     */
    public String getRegtime() {
        return regtime;
    }

    /**
     * @param regtime 注册时间
     */
    public void setRegtime(String regtime) {
        this.regtime = regtime;
    }

    /**
     * @return 上次登录时间
     */
    public String getLastlogintime() {
        return lastlogintime;
    }

    /**
     * @param lastlogintime 上次登录时间
     */
    public void setLastlogintime(String lastlogintime) {
        this.lastlogintime = lastlogintime;
    }

    /**
     * @return 上次登录ip
     */
    public String getLastloginip() {
        return lastloginip;
    }

    /**
     * @param lastloginip 上次登录ip
     */
    public void setLastloginip(String lastloginip) {
        this.lastloginip = lastloginip;
    }

    public String getSigntext() {
        return signtext;
    }

    public void setSigntext(String signtext) {
        this.signtext = signtext;
    }

    public List<String> getRoleids() {
        return roleids;
    }

    public void setRoleids(List<String> roleids) {
        this.roleids = roleids;
    }

    public String getProcode() {
        return procode;
    }

    public void setProcode(String procode) {
        this.procode = procode;
    }

    public String getProname() {
        return proname;
    }

    public void setProname(String proname) {
        this.proname = proname;
    }

    public String getCitycode() {
        return citycode;
    }

    public void setCitycode(String citycode) {
        this.citycode = citycode;
    }

    public String getCityname() {
        return cityname;
    }

    public void setCityname(String cityname) {
        this.cityname = cityname;
    }

    public String getAreacode() {
        return areacode;
    }

    public void setAreacode(String areacode) {
        this.areacode = areacode;
    }

    public String getAreaname() {
        return areaname;
    }

    public void setAreaname(String areaname) {
        this.areaname = areaname;
    }

    public Integer getMkuserid() {
        return mkuserid;
    }

    public void setMkuserid(Integer mkuserid) {
        this.mkuserid = mkuserid;
    }

    public String getUsersource() {
        return usersource;
    }

    public void setUsersource(String usersource) {
        this.usersource = usersource;
    }

    public interface Mapper extends BaseMapper<CpUser> {

        List<CpUser> login(@Param("username") String username, @Param("password") String password, @Param("usertype") String usertype);

        List<CpUser> login(@Param("username") String username, @Param("password") String password);

        /**
         * 通用
         * 重置密码，执行该方法前需要校验当前登录的用户是否拥有该权限，是否当前登录用户的子用户
         *
         * @param userid
         * @param password
         * @return
         */
        int resetPwd(@Param("userid") String userid, @Param("password") String password);

        /**
         * 重置密码，根据用户手机号
         *
         * @param phone
         * @param password
         * @return
         */
        int resetPasswordByPhone(@Param("phone") String phone, @Param("password") String password);

        /**
         * 查询当前用户是否和重置密码的用户属于同一个企业
         *
         * @param userid
         * @param thrid  当前用户的所属公司
         * @return
         */
        String checkUserHavePower(@Param("userid") String userid, @Param("thrid") String thrid);

        /**
         * 根据手机号查询对应用户主键
         *
         * @param phone
         * @return
         */
        String selectUserByPhone(@Param("phone") String phone);

        /**
         * 验证用户密码
         *
         * @param userid
         * @param password
         * @return
         */
        String checkUserPwd(@Param("userid") String userid, @Param("password") String password);

        List<String> getRoleidList(@Param("userid") String userid);

        CpUser getUserByUnionID(@Param("unionid") String unionId);

        CpUser getUserByOpenID(@Param("openid") String openId);

        List<Map<String, Object>> getFancePercnt(@Param("bdate") String bdate, @Param("edate") String edate);
    }
}
